﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWPF.Study.Windows
{
    public class MainViewModel
    {
        //1.通过委托进行View解耦
        public Action ShowPopup { get; set; }
        public Func<PopupModel, bool> ShowPopupFunc { get; set; }

        //2.IOC  参照一些IOC的思想
        ///第三方容器(对象)需要对象的时候，不是直接new，通过容器获取
        ///不是第三方插件 

        //命令
        private CommandBase _showCommand;
        public CommandBase ShowCommand
        {
            get
            {
                if (_showCommand == null)
                {
                    _showCommand = new CommandBase();
                    _showCommand.DoExecute = new Action<object>(obj =>
                    {
                        //没进来的，两种可能：
                        ///1、数据源没找到
                        ///2、命令名称错误
                        //打开弹窗
                        //不可取
                        //MVVM 根本目标：View与业务逻辑的解耦
                        //PopupWindow popupWindow = new PopupWindow();
                        //popupWindow.ShowDialog();

                        //View里可否出现ViewModel对象？   可以1   不可以2
                        //MVVM强调    业务   表现   附加内容    VM+Model-》绑定View
                        //VIP实战课 所以窗口删掉

                        //弹出窗口是一方面
                        //返回值 

                        //第一种方式：委托
                        //ShowPopup?.Invoke();

                        //第一种方式：委托
                        //需要传递Model
                        PopupModel subModel = new PopupModel();
                        subModel.Value = obj.ToString();

                        //保存的时候，取窗口中输入的数据
                        //是否可以拿到窗口数据？   可以1   不可以2
                        //if (ShowPopupFunc?.Invoke(subModel) == true)
                        //{
                        //    // 执保存
                        //    // 可以保持数据
                        //    Console.WriteLine(subModel.Value);
                        //}
                        //else
                        //{
                        //    // 执行取消
                        //}

                        // 第二种方式：第三方窗口容器
                        if (WindowContainer.ShowDialog<PopupModel>("PopupWindow", subModel))
                        {
                            // 执保存
                            // 可以保持数据
                            Console.WriteLine(subModel.Value);
                        }
                        else
                        {
                            // 执行取消
                        }

                        // 第三种：

                        //21：32   21：45   有问题可以提在讨论，
                        //21：45开始一对一答疑
                        // MVVM模式下窗口交互
                        // 单页面   Tab页
                        // Popup元素进行弹窗模拟（只是针对窗口进行Model的处理）
                        // 对于窗口的模拟不是很到位（需要一定的技术积累）
                    });
                }

                return _showCommand;
            }
        }
    }
}
